package com.yuyuto.conn.interf;

import com.yuyuto.conn.model.bean.Customer;
import com.yuyuto.conn.model.bean.ItemCardDetail;
import com.yuyuto.conn.model.bean.MemberCard;
import com.yuyuto.conn.model.bean.RedPacketDetail;
import com.yuyuto.conn.model.bean.UCoinAccount;
import com.yuyuto.conn.model.request.ReqCouponList;
import com.yuyuto.conn.model.request.ReqCouponPresent;
import com.yuyuto.conn.model.request.ReqEWalletBalance;
import com.yuyuto.conn.model.request.ReqEWalletRecord;
import com.yuyuto.conn.model.request.ReqItemCardDetail;
import com.yuyuto.conn.model.request.ReqItemCardOperate;
import com.yuyuto.conn.model.request.ReqItemCardRecord;
import com.yuyuto.conn.model.request.ReqMemberCardList;
import com.yuyuto.conn.model.request.ReqModifyPhoneNoInfo;
import com.yuyuto.conn.model.request.ReqRedPacketDetail;
import com.yuyuto.conn.model.request.ReqRedPacketList;
import com.yuyuto.conn.model.request.ReqRedPacketPresent;
import com.yuyuto.conn.model.request.ReqRedPacketRecord;
import com.yuyuto.conn.model.request.ReqRegister;
import com.yuyuto.conn.model.request.ReqSwitchPhoneNoCard;
import com.yuyuto.conn.model.request.ReqUCoinChargeTemp;
import com.yuyuto.conn.model.request.ReqUCoinDetail;
import com.yuyuto.conn.model.request.ReqUCoinOperationRecord;
import com.yuyuto.conn.model.request.ReqUsingMemberCardInfo;
import com.yuyuto.conn.model.response.RespCounponList;
import com.yuyuto.conn.model.response.RespEWalletBalance;
import com.yuyuto.conn.model.response.RespEWalletRecord;
import com.yuyuto.conn.model.response.RespItemCardList;
import com.yuyuto.conn.model.response.RespItemCardRecord;
import com.yuyuto.conn.model.response.RespMemberCardList;
import com.yuyuto.conn.model.response.RespRedPacketList;
import com.yuyuto.conn.model.response.RespRedPacketRecord;
import com.yuyuto.conn.model.response.RespUCoinChargeTemp;
import com.yuyuto.conn.model.response.RespUCoinOperationRecord;

import rx.Subscriber;

/**
 * Created by Demon on 2016/11/10.
 */

public interface ICustomerSystem {

    void login(Subscriber<Customer> subscriber, String phoneNo, String password);

    void sendAuthCode(String phoneNo);

    void register(Subscriber<Object> subscriber, ReqRegister reqRegister);

    void forgetPwd(Subscriber<Object> subscriber, ReqRegister reqRegister);

    /**
     * 个人模块
     */

    void modifyMemberInfo(Subscriber<Object> subscriber, ReqModifyPhoneNoInfo reqModifyMemberInfo);

    /*
     * 会员卡模块
     */
    void getUsingMemberCardInfo(Subscriber<MemberCard> subscriber, ReqUsingMemberCardInfo reqUsingMemberCardInfo);

    void getMemberCardList(Subscriber<RespMemberCardList> subscriber, ReqMemberCardList reqMemberCardList);

    void switchMemberCard(Subscriber<Object> subscriber, ReqSwitchPhoneNoCard reqSwitchMemberCard);

    /*
     * 悠币模块
     */
    void getUCoinInfo(Subscriber<UCoinAccount> subscriber, ReqUCoinDetail reqUCoinDetail);

    void getOperationRecord(Subscriber<RespUCoinOperationRecord> subscriber, ReqUCoinOperationRecord reqUCoinOperationRecord);

    void getChargeTemplate(Subscriber<RespUCoinChargeTemp> subscriber, ReqUCoinChargeTemp reqUCoinChargeTemp);

    /*
     * 项目卡模块
     */
    void getItemCardList(Subscriber<RespItemCardList> subscriber, String phoneNo, String memberCardId);

    void getItemCardDetail(Subscriber<ItemCardDetail> subscriber, ReqItemCardDetail reqItemCardDetail);

    void getConsumeRecord(Subscriber<RespItemCardRecord> subscriber, ReqItemCardRecord reqItemCardRecord);

    void operateItemCard(Subscriber<Object> subscriber, ReqItemCardOperate reqItemCardOperate);

    /*
     * 优惠券模块
     */
    void getCouponList(Subscriber<RespCounponList> subscriber, ReqCouponList reqCouponList);

    void couponPresent(Subscriber<Object> subscriber, ReqCouponPresent reqCouponPresent);

    /*
     * 红包模块
     */

    void getRedPacketList(Subscriber<RespRedPacketList> subscriber, ReqRedPacketList reqRedPacketList);

    void getRedPacketDetail(Subscriber<RedPacketDetail> subscriber, ReqRedPacketDetail reqRedPacketDetail);

    void getConsumeRecord(Subscriber<RespRedPacketRecord> subscriber, ReqRedPacketRecord reqRedPacketRecord);

    void giftGive(Subscriber<Object> subscriber, ReqRedPacketPresent reqRedPacketPresent);

    /*
     * 电子钱包模块
     */
    void getBalance(Subscriber<RespEWalletBalance> subscriber, ReqEWalletBalance reqEWalletBalance);

    void getOperationRecord(Subscriber<RespEWalletRecord> subscriber, ReqEWalletRecord reqEWalletRecord);
}
